# -*- coding: utf-8 -*-
# @File : myBrowser.py
# @Time : 2024/5/18 10:31
# @Author : syq
# @Email : 1721169065@qq.com
# @Software: PyCharm
from playwright.sync_api import sync_playwright
from 公司大屏项目.config.config import URL
class Browser:
    """浏览器工具类"""
    #初始化一个为None的browser
    #加一个下划线只是一个习惯，给子类使用（加不加都可以）
    _browser=None
    _browserPage=None
    @classmethod
    def get_browserPage(cls,browser_name='chromium'):
        """
        获取浏览器的一个实例对象 的一个页面
        :return:
        """
        #判断，是否为空
        if cls._browser is None:
            p = sync_playwright().start()
            if browser_name=='chromium':
                cls._browser=p.chromium.launch(headless=False)
                cls._browserPage=cls._browser.new_page()
            elif browser_name=='firefox':
                cls._browser=p.firefox.launch(headless=False)
                cls._browserPage = cls._browser.new_page()
            #执行登录
            cls.__login()
        return cls._browserPage
    @classmethod
    def __login(cls): #登录只有在这个模块中用到，其他地方没有用到，定义成私有的
        """
        优化成私有的有什么好处，不会污染外部的命名空间
        私有方法， 只能在类里边使用
        类外部无法使用，子类也不能继承
        只在浏览器刚打开的时候，执行一次登录
        该方法就是为了验证是否可以登录成功
        :return:
        """

        # 输入网址
        cls._browserPage.goto(URL)
        #输入用户名
        cls._browserPage.locator('.login-div>div:nth-child(2) .el-input__inner').fill('admin')
        #输入密码
        cls._browserPage.locator('.login-div>div:nth-child(4) .el-input__inner').fill('admin')
        #点击登录按钮
        cls._browserPage.locator(".submit-btn").click()
        # page.get_by_text("登 录").click()
        cls._browserPage.wait_for_timeout(5000) #查看登录后的效果
if __name__ == '__main__':
    browser=Browser()
    browser.get_browserPage()


